Reactã®experimental_useMutableSourceããã¯ã䜿çšããŠãé«åºŠãªå¯å€ããŒã¿åŠçãæ€èšããŸããæé©åãããããã©ãŒãã³ã¹ã®ããã®å©ç¹ãæ¬ ç¹ãããã³å®éã®å¿çšäŸãçè§£ããŸãã
React experimental_useMutableSource: å¯å€ããŒã¿ç®¡çã®æ·±å ã
Reactã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããããã®å®£èšçãªJavaScriptã©ã€ãã©ãªãšããŠãäžè¬çã«äžå€æ§ãæšå¥šããŠããŸãããã ããç¹å®ã®ã·ããªãªã§ã¯ãç¹ã«å€éšã·ã¹ãã ãè€éãªç¶æ
管çãæ±ãå Žåã«ãå¯å€ããŒã¿ã圹ç«ã¡ãŸããReactã®å®éšçAPIã®äžéšã§ããexperimental_useMutableSourceããã¯ã¯ãå¯å€ããŒã¿ãœãŒã¹ãReactã³ã³ããŒãã³ãã«å¹ççã«çµ±åããã¡ã«ããºã ãæäŸããŸãããã®èšäºã§ã¯ãexperimental_useMutableSourceã®è€éããæãäžãããã®ãŠãŒã¹ã±ãŒã¹ãå©ç¹ãæ¬ ç¹ãããã³å¹æçãªå®è£
ã®ããã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠèª¬æããŸãã
Reactã«ãããå¯å€ããŒã¿ã®çè§£
experimental_useMutableSourceã®å
·äœçãªå
容ã«å
¥ãåã«ãReactãšã³ã·ã¹ãã ã«ãããå¯å€ããŒã¿ã®ã³ã³ããã¹ããçè§£ããããšãéèŠã§ãã
Reactã«ãããäžå€æ§ã®ãã©ãã€ã
Reactã®äžå€æ§ã®ã³ã¢ååã¯ãããŒã¿ã¯äœæåŸã«çŽæ¥å€æŽãããã¹ãã§ã¯ãªããšããããšã§ãã代ããã«ã倿Žã¯ãå¿ èŠãªå€æŽãå ããããŒã¿ã®æ°ããã³ããŒãäœæããããšã«ãã£ãŠè¡ãããŸãããã®ã¢ãããŒãã«ã¯ãããã€ãã®å©ç¹ããããŸãã
- äºæž¬å¯èœæ§: äžå€æ§ã«ãããç¶æ ã®å€åã«ã€ããŠæšè«ããåé¡ããããã°ããããšã容æã«ãªããŸããããŒã¿ã¯æç€ºçã«å€æŽãããªãéãäžè²«æ§ãä¿ãããããã§ãã
- ããã©ãŒãã³ã¹ã®æé©å: Reactã¯ãããŒã¿ãžã®åç §ãæ¯èŒããããšã«ãã£ãŠå€æŽãå¹ççã«æ€åºã§ãããããã³ã¹ãã®ããããã£ãŒããªæ¯èŒãåé¿ã§ããŸãã
- ç°¡çŽ åãããç¶æ 管ç: äžå€ããŒã¿æ§é ã¯ãReduxãZustandãªã©ã®ç¶æ 管çã©ã€ãã©ãªãšã·ãŒã ã¬ã¹ã«é£æºããäºæž¬å¯èœãªç¶æ ã®æŽæ°ãå¯èœã«ããŸãã
å¯å€ããŒã¿ãæå¹ãªå Žå
äžå€æ§ã®å©ç¹ã«ãããããããç¹å®ã®ã·ããªãªã§ã¯å¯å€ããŒã¿ã®äœ¿çšãæ£åœåãããŸãã
- å€éšããŒã¿ãœãŒã¹: ããŒã¿ããŒã¹ãWebSocketæ¥ç¶ãªã©ã®å€éšã·ã¹ãã ãšã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã§ã¯ãå€ãã®å Žåãå¯å€ããŒã¿ãžã®æŽæ°ãåä¿¡ããå¿ èŠããããŸããããšãã°ãéèã¢ããªã±ãŒã·ã§ã³ã¯ãé »ç¹ã«æŽæ°ããããªã¢ã«ã¿ã€ã ã®æ ªäŸ¡ãåä¿¡ããå¯èœæ§ããããŸãã
- ããã©ãŒãã³ã¹ãéèŠãªã¢ããªã±ãŒã·ã§ã³: å Žåã«ãã£ãŠã¯ãããŒã¿ã®æ°ããã³ããŒãäœæãããªãŒããŒãããã倧ããããå¯èœæ§ããããŸããç¹ã«ãå€§èŠæš¡ãªããŒã¿ã»ãããé »ç¹ãªæŽæ°ãæ±ãå Žåã§ããã²ãŒã ãããŒã¿å¯èŠåããŒã«ã¯ãå¯å€ããŒã¿ãããã©ãŒãã³ã¹ãåäžãããããšãã§ããäŸã§ãã
- ã¬ã¬ã·ãŒã³ãŒããšã®çµ±å: æ¢åã®ã³ãŒãããŒã¹ãå¯å€ããŒã¿ã«å€§ããäŸåããŠããå Žåãå€§å¹ ãªãªãã¡ã¯ã¿ãªã³ã°ãªãã«äžå€æ§ãæ¡çšããããšã¯å°é£ã§ãã
experimental_useMutableSourceã®ç޹ä»
experimental_useMutableSourceããã¯ã¯ãReactã³ã³ããŒãã³ããå¯å€ããŒã¿ãœãŒã¹ã«ãµãã¹ã¯ã©ã€ããããæ¹æ³ãæäŸããåºã«ãªãããŒã¿ã倿Žããããšãã«å¹ççã«æŽæ°ã§ããããã«ããŸãããã®ããã¯ã¯Reactã®å®éšçAPIã®äžéšã§ããã倿Žãããå¯èœæ§ããããæ¬çªç°å¢ã§ã®äœ¿çšã«ã¯æ³šæãå¿
èŠã§ãã
ä»çµã¿
experimental_useMutableSourceã¯ã2ã€ã®åŒæ°ãåãåããŸãã
- source: å¯å€ããŒã¿ãžã®ã¢ã¯ã»ã¹ãæäŸãããªããžã§ã¯ãããã®ãªããžã§ã¯ãã«ã¯ã次ã®2ã€ã®ã¡ãœãããå¿ èŠã§ãã
getVersion():ããŒã¿ã®çŸåšã®ããŒãžã§ã³ã衚ãå€ãè¿ããŸããReactã¯ãã®å€ã䜿çšããŠãããŒã¿ã倿Žããããã©ããã倿ããŸããsubscribe(callback):ããŒã¿ã倿Žããããã³ã«åŒã³åºãããã³ãŒã«ããã¯é¢æ°ãç»é²ããŸããã³ãŒã«ããã¯é¢æ°ã¯ãã³ã³ããŒãã³ãã§forceUpdateãåŒã³åºããŠãåã¬ã³ããªã³ã°ãããªã¬ãŒããå¿ èŠããããŸãã- getSnapshot: çŸåšã®ããŒã¿ã®ã¹ãããã·ã§ãããè¿ã颿°ããã®é¢æ°ã¯ãã¬ã³ããªã³ã°äžã«åŒã³åºããããããçŽç²ãã€åæçã§ããå¿ èŠããããŸãã
å®è£ äŸ
experimental_useMutableSourceã®äœ¿ç𿹿³ã®åºæ¬çãªäŸã次ã«ç€ºããŸãã
import { experimental_useMutableSource as useMutableSource } from 'react';
import { useState, useRef, useEffect } from 'react';
// Mutable data source
const createMutableSource = (initialValue) => {
let value = initialValue;
let version = 0;
let listeners = [];
const source = {
getVersion() {
return version;
},
subscribe(listener) {
listeners.push(listener);
return () => {
listeners = listeners.filter((l) => l !== listener);
};
},
setValue(newValue) {
value = newValue;
version++;
listeners.forEach((listener) => listener());
},
getValue() {
return value;
},
};
return source;
};
function MyComponent() {
const [mySource, setMySource] = useState(() => createMutableSource("Initial Value"));
const snapshot = useMutableSource(mySource, (source) => source.getValue());
const handleChange = () => {
mySource.setValue(Date.now().toString());
};
return (
Current Value: {snapshot}
);
}
export default MyComponent;
ãã®äŸã§ã¯:
createMutableSourceã¯ãgetValueãsetValueãgetVersionãããã³subscribeã¡ãœãããåããåçŽãªå¯å€ããŒã¿ãœãŒã¹ãäœæããŸããuseMutableSourceã¯ãMyComponentãmySourceã«ãµãã¹ã¯ã©ã€ãããŸããsnapshot倿°ã¯ãããŒã¿ã®çŸåšã®å€ãä¿æããããŒã¿ã倿Žããããã³ã«æŽæ°ãããŸããhandleChange颿°ã¯ãå¯å€ããŒã¿ã倿Žããã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°ãããªã¬ãŒããŸãã
ãŠãŒã¹ã±ãŒã¹ãšäŸ
experimental_useMutableSourceã¯ãå€éšã·ã¹ãã ãšçµ±åããããè€éãªå¯å€ç¶æ
ã管çãããããå¿
èŠãããã·ããªãªã§ç¹ã«åœ¹ç«ã¡ãŸããå
·äœçãªäŸã次ã«ç€ºããŸãã
ãªã¢ã«ã¿ã€ã ããŒã¿å¯èŠå
ãªã¢ã«ã¿ã€ã ã®æ ªäŸ¡ã衚瀺ããæ ªåŒåžå Žã®ããã·ã¥ããŒããèããŠã¿ãŸããããããŒã¿ã¯ãå€éšããŒã¿ãã£ãŒãã«ãã£ãŠåžžã«æŽæ°ãããŸããexperimental_useMutableSourceã䜿çšãããšãäžèŠãªåã¬ã³ããªã³ã°ãåŒãèµ·ããããšãªããããã·ã¥ããŒããå¹ççã«æŽæ°ã§ããŸãã
import { experimental_useMutableSource as useMutableSource } from 'react';
import { useEffect, useRef, useState } from 'react';
// Assume this function fetches stock data from an external API
const fetchStockData = async (symbol) => {
//Replace with actual api call
await new Promise((resolve) => setTimeout(resolve, 500))
return {price: Math.random()*100, timestamp: Date.now()};
};
// Mutable data source
const createStockSource = (symbol) => {
let stockData = {price:0, timestamp:0};
let version = 0;
let listeners = [];
let fetching = false;
const updateStockData = async () => {
if (fetching) return;
fetching = true;
try{
const newData = await fetchStockData(symbol);
stockData = newData;
version++;
listeners.forEach((listener) => listener());
} catch (error) {
console.error("Failed to update stock data", error);
} finally{
fetching = false;
}
}
const source = {
getVersion() {
return version;
},
subscribe(listener) {
listeners.push(listener);
return () => {
listeners = listeners.filter((l) => l !== listener);
};
},
getStockData() {
return stockData;
},
updateStockData,
};
return source;
};
function StockDashboard({ symbol }) {
const [stockSource, setStockSource] = useState(() => createStockSource(symbol));
useEffect(() => {
stockSource.updateStockData()
const intervalId = setInterval(stockSource.updateStockData, 2000);
return () => clearInterval(intervalId);
}, [symbol, stockSource]);
const stockData = useMutableSource(stockSource, (source) => source.getStockData());
return (
{symbol}
Price: {stockData.price}
Last Updated: {new Date(stockData.timestamp).toLocaleTimeString()}
);
}
export default StockDashboard;
ãã®äŸã§ã¯:
fetchStockData颿°ã¯ãå€éšAPIããæ ªäŸ¡ããŒã¿ããã§ããããŸããããã¯ã0.5ç§åŸ æ©ããéåæpromiseã«ãã£ãŠã·ãã¥ã¬ãŒããããŸããcreateStockSourceã¯ãæ ªäŸ¡ãä¿æããå¯å€ããŒã¿ãœãŒã¹ãäœæããŸããããã¯ãsetIntervalã䜿çšããŠ2ç§ããšã«æŽæ°ãããŸããStockDashboardã³ã³ããŒãã³ãã¯ãexperimental_useMutableSourceã䜿çšããŠæ ªäŸ¡ããŒã¿ãœãŒã¹ã«ãµãã¹ã¯ã©ã€ãããäŸ¡æ Œã倿Žããããã³ã«è¡šç€ºãæŽæ°ããŸãã
ã²ãŒã éçº
ã²ãŒã éçºã§ã¯ãã²ãŒã ã®ç¶æ
ãå¹ççã«ç®¡çããããšãããã©ãŒãã³ã¹ã«ãšã£ãŠéåžžã«éèŠã§ããexperimental_useMutableSourceã䜿çšãããšãã²ãŒã ãšã³ãã£ãã£ïŒãã¬ãŒã€ãŒã®äœçœ®ãæµã®äœçœ®ãªã©ïŒãå¹ççã«æŽæ°ããã²ãŒã ã·ãŒã³å
šäœã®äžèŠãªåã¬ã³ããªã³ã°ãåŒãèµ·ããããšã¯ãããŸããã
import { experimental_useMutableSource as useMutableSource } from 'react';
import { useEffect, useRef, useState } from 'react';
// Mutable data source for player position
const createPlayerSource = () => {
let playerPosition = {x: 0, y: 0};
let version = 0;
let listeners = [];
const movePlayer = (dx, dy) => {
playerPosition = {x: playerPosition.x + dx, y: playerPosition.y + dy};
version++;
listeners.forEach(listener => listener());
};
const getPlayerPosition = () => playerPosition;
const source = {
getVersion: () => version,
subscribe: (listener) => {
listeners.push(listener);
return () => {
listeners = listeners.filter(l => l !== listener);
};
},
movePlayer,
getPlayerPosition,
};
return source;
};
function GameComponent() {
const [playerSource, setPlayerSource] = useState(() => createPlayerSource());
const playerPosition = useMutableSource(playerSource, source => source.getPlayerPosition());
const handleMove = (dx, dy) => {
playerSource.movePlayer(dx, dy);
};
useEffect(() => {
const handleKeyDown = (e) => {
switch (e.key) {
case 'ArrowUp': handleMove(0, -1); break;
case 'ArrowDown': handleMove(0, 1); break;
case 'ArrowLeft': handleMove(-1, 0); break;
case 'ArrowRight': handleMove(1, 0); break;
default: break;
}
};
window.addEventListener('keydown', handleKeyDown);
return () => window.removeEventListener('keydown', handleKeyDown);
}, [playerSource]);
return (
Player Position: X = {playerPosition.x}, Y = {playerPosition.y}
{/* Game rendering logic here */}
);
}
export default GameComponent;
ãã®äŸã§ã¯:
createPlayerSourceã¯ããã¬ãŒã€ãŒã®äœçœ®ãæ ŒçŽããå¯å€ããŒã¿ãœãŒã¹ãäœæããŸããGameComponentã¯ãexperimental_useMutableSourceã䜿çšããŠãã¬ãŒã€ãŒã®äœçœ®ã«ãµãã¹ã¯ã©ã€ãããäœçœ®ã倿Žããããã³ã«è¡šç€ºãæŽæ°ããŸããhandleMove颿°ã¯ããã¬ãŒã€ãŒã®äœçœ®ãæŽæ°ããã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°ãããªã¬ãŒããŸãã
å ±åããã¥ã¡ã³ãç·šé
å
±åããã¥ã¡ã³ãç·šéã®å ŽåããããŠãŒã¶ãŒãè¡ã£ã倿Žã¯ãä»ã®ãŠãŒã¶ãŒã«ãªã¢ã«ã¿ã€ã ã§åæ ãããå¿
èŠããããŸããå¯å€ã®å
±æããã¥ã¡ã³ããªããžã§ã¯ããšexperimental_useMutableSourceã䜿çšãããšãå¹ççã§å¿çæ§ã®é«ãæŽæ°ãä¿èšŒãããŸãã
experimental_useMutableSourceã®å©ç¹
experimental_useMutableSourceã䜿çšãããšãããã€ãã®å©ç¹ããããŸãã
- ããã©ãŒãã³ã¹ã®æé©å: å¯å€ããŒã¿ãœãŒã¹ã«ãµãã¹ã¯ã©ã€ãããããšã«ãããã³ã³ããŒãã³ãã¯åºã«ãªãããŒã¿ã倿Žãããå Žåã«ã®ã¿åã¬ã³ããªã³ã°ãããäžèŠãªã¬ã³ããªã³ã°ãåæžãããããã©ãŒãã³ã¹ãåäžããŸãã
- ã·ãŒã ã¬ã¹ãªçµ±å:
experimental_useMutableSourceã¯ãå¯å€ããŒã¿ãæäŸããå€éšã·ã¹ãã ãšçµ±åããããã®ã¯ãªãŒã³ã§å¹ççãªæ¹æ³ãæäŸããŸãã - ç°¡çŽ åãããç¶æ 管ç: å¯å€ããŒã¿ç®¡çãå€éšãœãŒã¹ã«ãªãããŒãããããšã«ãããã³ã³ããŒãã³ãã®ç¶æ ããžãã¯ãç°¡çŽ åããã¢ããªã±ãŒã·ã§ã³ã®è€éãã軜æžã§ããŸãã
æ¬ ç¹ãšèæ ®äºé
ãã®å©ç¹ã«ãããããããexperimental_useMutableSourceã«ã¯ããã€ãã®æ¬ ç¹ãšèæ
®äºé
ããããŸãã
- å®éšçAPI: å®éšçAPIãšããŠã
experimental_useMutableSourceã¯å€æŽãããå¯èœæ§ããããå°æ¥ã®ReactãªãªãŒã¹ã§å®å®ããŠããªãå¯èœæ§ããããŸãã - è€éã:
experimental_useMutableSourceãå®è£ ããã«ã¯ãç«¶åç¶æ ãããŒã¿ã®äžè²«æ§ã®ãªãç¶æ ãåé¿ããããã«ãå¯å€ããŒã¿ãœãŒã¹ãšåæãæ éã«ç®¡çããå¿ èŠããããŸãã - ãã°ã®å¯èœæ§: å¯å€ããŒã¿ã¯ãæ£ããåŠçãããªãå Žåã埮åŠãªãã°ãåŒãèµ·ããå¯èœæ§ããããŸããã³ãŒãã培åºçã«ãã¹ãããäºæããªãå¯äœçšãé²ãããã«é²åŸ¡çã³ããŒãªã©ã®ææ³ã䜿çšããããšãæ€èšããããšãéèŠã§ãã
- åžžã«æé©ãªãœãªã¥ãŒã·ã§ã³ãšã¯éããŸãã:
experimental_useMutableSourceã䜿çšããåã«ãäžå€ãã¿ãŒã³ãèªåã®ã±ãŒã¹ã«ååã§ãããã©ãããæ€èšããŠãã ãããäžå€æ§ã¯ãããåªããäºæž¬å¯èœæ§ãšãããã°å¯èœæ§ãæäŸããŸãã
experimental_useMutableSourceã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
experimental_useMutableSourceã广çã«äœ¿çšããã«ã¯ã次ã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããã
- å¯å€ããŒã¿ãæå°éã«æãã: å¿ èŠãªå Žåã«ã®ã¿å¯å€ããŒã¿ã䜿çšããŸããäºæž¬å¯èœæ§ãç¶æããç¶æ 管çãç°¡çŽ åããããã«ãå¯èœãªéãäžå€ããŒã¿æ§é ãåªå ããŸãã
- å¯å€ç¶æ ãã«ãã»ã«åãã: ã¢ã¯ã»ã¹ãå¶åŸ¡ããæå³ããªã倿Žãé²ãããã«ãå¯å€ããŒã¿ãé©åã«å®çŸ©ãããã¢ãžã¥ãŒã«ãŸãã¯ã¯ã©ã¹å ã«ã«ãã»ã«åããŸãã
- ããŒãžã§ãã³ã°ã䜿çšãã: å¯å€ããŒã¿ã®ããŒãžã§ãã³ã°ã¡ã«ããºã ãå®è£
ããŠã倿Žã远跡ããã³ã³ããŒãã³ããå¿
èŠãªå Žåã«ã®ã¿åã¬ã³ããªã³ã°ãããããã«ããŸãã
getVersionã¡ãœããã¯ããã«äžå¯æ¬ ã§ãã - ã¬ã³ããªã³ã°ã§çŽæ¥å€æŽããªã: ã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°é¢æ°å ã§å¯å€ããŒã¿ãçŽæ¥å€æŽããªãã§ãã ãããç¡éã«ãŒããäºæããªãåäœã«ã€ãªããå¯èœæ§ããããŸãã
- 培åºçãªãã¹ã: ã³ãŒãã培åºçã«ãã¹ãããŠãå¯å€ããŒã¿ãæ£ããåŠçãããç«¶åç¶æ ãããŒã¿ã®äžè²«æ§ã®ãªãç¶æ ããªãããšã確èªããŸãã
- æ éãªåæ: è€æ°ã®ã³ã³ããŒãã³ããåãå¯å€ããŒã¿ãœãŒã¹ãå ±æããå ŽåãããŒã¿ãžã®ã¢ã¯ã»ã¹ãæ éã«åæããŠãç«¶åãåé¿ããããŒã¿ã®äžè²«æ§ã確ä¿ããŸããåæã¢ã¯ã»ã¹ã管çããããã«ãããã¯ããã©ã³ã¶ã¯ã·ã§ã³æŽæ°ãªã©ã®ææ³ã䜿çšããããšãæ€èšããŠãã ããã
- ä»£æ¿æ¡ãæ€èšãã:
experimental_useMutableSourceã䜿çšããåã«ãäžå€ããŒã¿æ§é ãã°ããŒãã«ç¶æ 管çã©ã€ãã©ãªãªã©ã®ä»ã®ã¢ãããŒãããèªåã®ãŠãŒã¹ã±ãŒã¹ã«ããé©åã§ãããã©ãããè©äŸ¡ããŸãã
experimental_useMutableSourceã®ä»£æ¿
experimental_useMutableSourceã¯ãå¯å€ããŒã¿ãReactã³ã³ããŒãã³ãã«çµ±åããæ¹æ³ãæäŸããŸãããããã€ãã®ä»£æ¿æ¡ãååšããŸãã
- ã°ããŒãã«ç¶æ 管çã©ã€ãã©ãª: ReduxãZustandãRecoilãªã©ã®ã©ã€ãã©ãªã¯ãå€éšã·ã¹ãã ããã®æŽæ°ã®åŠçãå«ããã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã管çããããã®å ç¢ãªã¡ã«ããºã ãæäŸããŸãããããã®ã©ã€ãã©ãªã¯éåžžãäžå€ããŒã¿æ§é ã«äŸåããã¿ã€ã ãã©ãã«ãããã°ãå¯äœçšãåŠçããããã®ããã«ãŠã§ã¢ãªã©ã®æ©èœãæäŸããŸãã
- Context API: Reactã®Context APIã䜿çšãããšãpropsãæç€ºçã«æž¡ãããšãªããã³ã³ããŒãã³ãéã§ç¶æ ãå ±æã§ããŸããContextã¯éåžžãäžå€ããŒã¿ã§äœ¿çšãããŸãããæŽæ°ãšãµãã¹ã¯ãªãã·ã§ã³ãæ éã«ç®¡çããããšã§ãå¯å€ããŒã¿ã§ã䜿çšã§ããŸãã
- ã«ã¹ã¿ã ããã¯: ã«ã¹ã¿ã ããã¯ãäœæããŠãå¯å€ããŒã¿ã管çããã³ã³ããŒãã³ãã倿Žã«ãµãã¹ã¯ã©ã€ãã§ããŸãããã®ã¢ãããŒãã¯ããæè»æ§ãæäŸããŸãããããã©ãŒãã³ã¹ã®åé¡ãããŒã¿ã®äžè²«æ§ã®ãªãç¶æ ãåé¿ããã«ã¯ãæ éãªå®è£ ãå¿ èŠã§ãã
- ã·ã°ãã«: Preact Signalsãªã©ã®ãªã¢ã¯ãã£ãã©ã€ãã©ãªã¯ãå€åããå€ã管çããã³ãµãã¹ã¯ã©ã€ãããããã®å¹ççãªæ¹æ³ãæäŸããŸãããã®ã¢ãããŒãã¯Reactãããžã§ã¯ãã«çµ±åã§ããReactã®ããã¯ãä»ããŠå¯å€ããŒã¿ãçŽæ¥ç®¡çããä»£æ¿ææ®µãæäŸããŸãã
çµè«
experimental_useMutableSourceã¯ãå¯å€ããŒã¿ãReactã³ã³ããŒãã³ãã«çµ±åããããã®åŒ·åãªã¡ã«ããºã ãæäŸããç¹å®ã®ã·ããªãªã§å¹ççãªæŽæ°ãšããã©ãŒãã³ã¹ã®åäžãå¯èœã«ããŸãããã ããå¯å€ããŒã¿ã«é¢é£ããæ¬ ç¹ãšèæ
®äºé
ãçè§£ããæœåšçãªåé¡ãåé¿ããããã«ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšãéèŠã§ããexperimental_useMutableSourceã䜿çšããåã«ããããèªåã®ãŠãŒã¹ã±ãŒã¹ã«æé©ãªãœãªã¥ãŒã·ã§ã³ã§ãããã©ãããæ
éã«è©äŸ¡ããããå®å®æ§ãšä¿å®æ§ãæäŸããå¯èœæ§ã®ãã代æ¿ã¢ãããŒããæ€èšããŠãã ãããå®éšçAPIãšããŠããã®åäœãŸãã¯å¯çšæ§ãå°æ¥ã®ããŒãžã§ã³ã®Reactã§å€æŽãããå¯èœæ§ãããããšã«æ³šæããŠãã ãããexperimental_useMutableSourceãšãã®ä»£æ¿ã®è€éããçè§£ããããšã§ãReactã¢ããªã±ãŒã·ã§ã³ã§å¯å€ããŒã¿ã管çããæ¹æ³ã«ã€ããŠæ
å ±ã«åºã¥ããæ±ºå®ãäžãããšãã§ããŸãã